/*
 * @description: 
 * @Date: 2022-12-01 15:39:52
 * @example: 
 * @params: 
 */
/**
 * @description 转换从 .env 文件中获取的对象
 * @author kai
 * @date 2021/10/8 09:30
 * @param envConf
 */
 export function wrapperEnv(envConf: Recordable): ViteEnv {
    // 创建一个对象来存储转换的键值
    const ret: any = {};
  
    /**
     * @description wrapperEnv
     * @author kai
     * @date 2021/10/8 14:19
     * @example
     * Object.keys(envConf) = [
          'VITE_USE_MOCK',
          'VITE_PUBLIC_PATH',
          'VITE_PROXY',
          'VITE_DROP_CONSOLE',
          'VITE_GLOB_API_URL',
          'VITE_GLOB_UPLOAD_URL',
          'VITE_GLOB_API_URL_PREFIX',
          'VITE_PORT',
          'VITE_GLOB_APP_TITLE',
          'VITE_GLOB_APP_SHORT_NAME'
       ]
     */
    for (const envName of Object.keys(envConf)) {
      /**
       * @description
         realName 是每一个配置对应的 value
         中间的正则替换就是将\\n替换成\n。
         console.log('asda\\\n\\n\n'.replace(/\n/g, '\n')) =>asda\ [回车\n] \n [回车\n]
         console.log('asda\\\n\\n\n'.replace(/\\n/g, '\n'))=>asda\ [回车\n] [回车\n] [回车\n]
         console.log('asda\\\n\\n\n'.replace(/\\\n/g, '\n'))=>asda [回车\n] \n [回车\n]
       */
      let realName = envConf[envName].replace(/\\n/g, '\n');
      // 将 'true' 或者 'false' 的字符串转换为 boolean 对应的 true 或者 false
      realName = realName === 'true' ? true : realName === 'false' ? false : realName;
  
      // 端口转换成 number 类型
      if (envName === 'VITE_PORT') {
        realName = Number(realName);
      }
  
      // 将代理配置转换成数组
      if (envName === 'VITE_PROXY' && realName) {
        try {
          realName = JSON.parse(realName.replace(/'/g, '"'));
        } catch (error) {
          realName = '';
        }
      }
      // 将转换后的属性值 realName 赋值给 ret 对应的每一个键
      ret[envName] = realName;
  
      // 将原始的值也就是未转换的值赋值给 process.env
      if (typeof realName === 'string') {
        process.env[envName] = realName;
      } else if (typeof realName === 'object') {
        process.env[envName] = JSON.stringify(realName);
      }
    }
  
    return ret;
  }
  